package main.java.br.com.projeto.domain.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import main.java.br.com.projeto.domain.entity.Produto;

public class DaoProduto extends Dao<Produto>{

	/**
	 * 
	 */
	private static final long serialVersionUID = -8959876349722565545L;

	public DaoProduto() {
		super(Produto.class);
	}
	
	public List<Produto> listByFilter(Long id, String filter) {
		String hql = "select produto from Produto produto " 
				+ "where ( (lower(produto.descricao) like '%' || lower ( cast(:filter as string) ) || '%' or :filter = null) " 
				+" 		or (lower(produto.grupo.grupo) like '%' || lower ( cast(:filter as string) ) || '%' or :filter = null) )"
				+ "and (produto.id = :id or :id = 0) "
				+ "order by produto.id";

		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("filter", filter);
		parameters.put("id", id);

		return this.findOneResult(hql, parameters);
	}
	
	public List<Produto> listProdutosFornecedores (Long fornecedorId) {
		String hql = "select produto from Produto produto "
				+ "join produto.fornecedores fornecedores "
				+ "where fornecedores.id = :fornecedorId " 
				+ "order by produto.id";

		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("fornecedorId", fornecedorId);
		return this.findOneResult(hql, parameters);
	}
	
	public List<Produto> listProdutosByDescricao( String descricao )
	{
		String hql = "select produto from Produto produto "
				+ "where lower(produto.descricao) like '%' || lower ( cast(:descricao as string) ) || '%'";

		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("descricao", descricao);
		return this.findOneResult(hql, parameters);
	}
}
